import org.junit.Test;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.*;
import java.util.Properties;

/**
 * @author: lizemin
 * @version: 1.0
 */
public class MailTest2 {

    /**
     * 生成一个邮件文件
     * @throws IOException
     * @throws MessagingException
     */
    @Test
    public void test1() throws IOException, MessagingException {
            //环境
            Session session = Session.getInstance(new Properties());
            //邮件
            MimeMessage msg = new MimeMessage(session);
            //发件人，注意中文的处理
            msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText("东方不败") + "\" <2829035979@qq.com>"));
            //设置主题
            msg.setSubject("越来越棒！");
            //设置邮件回复人
            msg.setReplyTo(new Address[]{new InternetAddress("17771414912@163.com")});
            //收件人
            msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(MimeUtility.encodeText("李泽民") + " <17771414912@163.com>"));

            //整封邮件的MINE消息体
            MimeMultipart msgMultipart = new MimeMultipart("mixed");//混合的组合关系
            //设置邮件的MINE消息体
            msg.setContent(msgMultipart);

            //附件1
            MimeBodyPart attch1 = new MimeBodyPart();
            //附件2
            MimeBodyPart attch2 = new MimeBodyPart();
            //正文内容
            MimeBodyPart content = new MimeBodyPart();

            //把内容，附件1，附件2加入到 MINE消息体中
            msgMultipart.addBodyPart(attch1);
            msgMultipart.addBodyPart(attch2);
            msgMultipart.addBodyPart(content);

            //把文件，添加到附件1中
            //数据源
            DataSource ds1 = new FileDataSource(
                    new File("C:\\Users\\15871\\Downloads\\Application\\test\\mail-1.4.7-javadoc.jar")
            );

            //数据处理器
            DataHandler dh1 = new DataHandler(ds1);
            //设置第一个附件的数据
            attch1.setDataHandler(dh1);
            //设置第一个附件的文件名
            attch1.setFileName(
                    MimeUtility.encodeText("mail-1.4.7-javadoc.jar")
            );

            //把文件，添加到附件2中
            DataSource ds2 = new FileDataSource(
                    new File("C:\\Users\\15871\\Downloads\\Application\\test\\index.html")
            );
            DataHandler dh2 = new DataHandler(ds2);
            attch2.setDataHandler(dh2);
            attch2.setFileName(MimeUtility.encodeText("index.html"));

            //正文（图片和文字部分）
            MimeMultipart bodyMultipart = new MimeMultipart("related");
            //设置内容为正文
            content.setContent(bodyMultipart);
            //html代码部分
            MimeBodyPart htmlPart = new MimeBodyPart();
            //html中嵌套的图片部分
            MimeBodyPart gifPart = new MimeBodyPart();
            //正文添加图片和html代码
            bodyMultipart.addBodyPart(htmlPart);
            bodyMultipart.addBodyPart(gifPart);

            //把文件，添加到图片中
            DataSource gifds = new FileDataSource(
                    new File("C:\\Users\\15871\\Pictures\\beauty03.jpg")
            );
            DataHandler gifdh = new DataHandler(gifds);
            gifPart.setDataHandler(gifdh);
            //说明html中的img标签的src，引用的是此图片
            gifPart.setHeader("Content-Location", "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2703288617,3613848102&fm=23&gp=0.jpg");

            //html代码
            htmlPart.setContent("马蓉出轨王宝强的经纪人的事情其实根本曾经划上了句号。加上前段时间的白百何出轨小鲜肉的事情，把文娱圈的潘金莲的丑闻推上了一个新的阶段。时间就是一个沙漏，马蓉和王宝强的离婚事情，也慢慢被人们淡忘。<img src='https://www.google.com/search?q=%E5%9B%BE%E7%89%87&sxsrf=ALeKk01zsxU2d0r-Mf5IQxtN-rppck1QTA:1625383610707&tbm=isch&source=iu&ictx=1&fir=YUHOkYTvDD4mAM%252CSgvOCUSxToqPOM%252C_&vet=1&usg=AI4_-kQoaujz4k7O000z8p62f8M28TtzMQ&sa=X&ved=2ahUKEwjulfXl8cjxAhVeyIsBHdQLBzQQ9QF6BAgMEAE#imgrc=YUHOkYTvDD4mAM'>", "text/html;charset=utf-8");

            //生成文件邮件
            msg.saveChanges();

            //输出
            OutputStream ips = new FileOutputStream("C:\\Users\\15871\\Desktop\\mybatis\\demo3.eml");
            msg.writeTo(ips);
            ips.close();
        }

    /**
     * 将前面生成的邮件发送出去
     * @throws FileNotFoundException
     * @throws MessagingException
     */

        @Test
        public void test2() throws FileNotFoundException, MessagingException {
            Properties properties = new Properties();
            // 开启debug调试 ，打印信息
            properties.setProperty("mail.debug", "true");
            // 发送服务器需要身份验证
            properties.setProperty("mail.smtp.auth", "true");
            // 发送服务器端口，可以不设置，默认是25
//            properties.setProperty("mail.smtp.port", "25");
            // 发送邮件协议名称
            properties.setProperty("mail.transport.protocol", "smtp");
            // 设置邮件服务器主机名
            properties.setProperty("mail.host", "smtp.qq.com");
            // 环境信息
            Session session = Session.getInstance(properties, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    // 在session中设置账户信息，Transport发送邮件时会使用
                    return new PasswordAuthentication( "2829035979@qq.com", "ffwbtqpapbiddeii");
                }
            });


            //读取本地邮件
            Message message = new MimeMessage(session, new FileInputStream(new File("C:\\Users\\15871\\Desktop\\mybatis\\demo3.eml")));

            //发送邮件
            Transport.send(message, InternetAddress.parse("17771414912@163.com") );

        }

}
